perm filename EQUAT.VLI[VLI,LSP] blob
sn#381983 filedate 1978-09-08 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 (status 18 '/! '(lambda () ['var (read)]))
C00004 ENDMK
Cā;
(status 18 '/! '(lambda () ['var (read)]))
(de match (p d ;; aux) (mat p d nil))
(de mat (p d a) (cond
((and (null p) (null d)) (or a t))
((eq (car p) 'var)
(if (setq aux (assq (cadr p) a)) (equal (cadr aux) d)
(cons [(cadr p) d] a)))
((or (null p) (null d)) nil)
((atom p) (eq p d))
((atom d) (eq p d))
((setq aux (mat (car p) (car d) a))
(mat (cdr p) (cdr d) (if (eq aux t) a aux)))
))
(de remp (a e ;; aux) (cond
((atom e) e)
((eq (car e) 'var) (cadr (assq (cadr e) a)))
(t (cons (remp a (car e)) (remp a (cdr e))))))
(de foo (x ;; aux) (let ((lp lequat))
(cond
((null lp) 'erreur)
((findmatch (caar lp) x (cadar lp)))
(t (self (cdr e)))
)))
(setqq lequat (
((app nil !y) !y)
((app (cons !x !y) !z) (cons !x (app !y !z)))
))
(de findmatch (p e r ;; aux)
(escape exit (maps e '(lambda (x)
(if (setq aux (match p x))
(exit (rplacb x (remp aux r))))))))
(de bar (e)
(while (neq 'erreur (setq e (foo e))) (print e)))